/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bddfirstproject.controller;

import bddfirstproject.AccesBD;
import bddfirstproject.model.Auteur;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author epulapp
 */
public class AuteurDAL {
    
    //Constructeur par défaut
    public AuteurDAL() {
    }
    

    //--------------------------------------------------------------------------
    //Ajouter un auteur a la base de données
    //--------------------------------------------------------------------------
    public void ajouterAuteur(Auteur auteur) {
        
        String nom  = auteur.getNomAuteur();
        String mail = auteur.getMailAuteur();

        try {
           
            AccesBD connect = new AccesBD();
            //Connexion à la base
            connect.openConnection();

            //On appelle la procédure stockée osus ORACLE NOUVEL_AUTEUR
            CallableStatement auteurInsert = connect.getConnect().prepareCall("{ call NOUVEL_AUTEUR(?, ?) }");           
            auteurInsert.setString(1,nom);
            auteurInsert.setString(2,mail);
            auteurInsert.execute();        
            connect.getConnect().commit();       
            System.out.println("L'auteur "+nom+" a été inséré dans la base ORACLE");    

            //Fermeture de la connexion
            connect.closeConnection();
            
        } 
        catch (IOException e1) {
            System.out.println("Erreur d'accès à la base " + e1);
        }
        catch (java.sql.SQLException e2) {
            System.out.println("Erreur lors de l'exécution de la requête " + e2);
        }
        catch (Exception e3) {
            System.out.println("Une erreur a été rencontrée " + e3);
        }
    }
    
    
    //--------------------------------------------------------------------------
    //Récupérer la liste de tous les auteurs
    //--------------------------------------------------------------------------
    public static ArrayList<Auteur> getAllAuteur() throws IOException, SQLException {
        
        ArrayList<Auteur> listeAuteur = new ArrayList<Auteur>();    
        AccesBD connect = new AccesBD();
        //Connexion à la base
        connect.openConnection();

        //Requête à exécuter
        java.sql.Statement requete  = connect.getConnect().createStatement();
        java.sql.ResultSet res      = requete.executeQuery("SELECT id_auteur, nom, email, nb_sujet FROM AUTEUR");

        //Parcours des résultats
        while (res.next()) {
            listeAuteur.add(new Auteur(res.getInt(1), res.getString(2), res.getString(3), res.getInt(4)));
        }
        //Fermeture des resultsets
        res.close();
        requete.close();      

        //Fermeture de la connexion
        connect.closeConnection();

        return (listeAuteur);
    }
    
    
    //--------------------------------------------------------------------------
    //Récupérer la liste de tous les auteurs
    //--------------------------------------------------------------------------
    public static Auteur getAuteur(int idAuteur) {
        
        Auteur auteur = new Auteur();

        try {
            
            AccesBD connect = new AccesBD();
            //Connexion à la base
            connect.openConnection();
            
            //Requête à exécuter
            java.sql.Statement requete  = connect.getConnect().createStatement();
            java.sql.ResultSet res      = requete.executeQuery("SELECT id_auteur, nom, email, nb_sujet FROM AUTEUR WHERE id_auteur = " + idAuteur);
            
            res.next();
            int nombreLignes = res.getRow();
            if(nombreLignes > 0)
            {
                auteur.setIdAuteur(res.getInt(1));
                auteur.setNomAuteur(res.getString(2));
                auteur.setMailAuteur(res.getString(3));
                auteur.setNbSujetAuteur(res.getInt(4));
            }
            else throw new Exception("Aucun auteur ne correspond à cet identifiant");
            
            //Fermeture des resultsets
            res.close();
            requete.close();
            
            //Fermeture de la connexion
            connect.closeConnection();
            
        } 
        catch (IOException e1) {
            System.out.println("Erreur d'accès à la base " + e1);
        }
        catch (java.sql.SQLException e2) {
            System.out.println("Erreur lors de l'exécution de la requête " + e2);
        }
        catch (Exception e3) {
            System.out.println("Une erreur a été rencontrée " + e3);
        }
        
        return (auteur);
    }
    
    
}
